#include <iostream>
#include "Heap.h"
#include "heap.h"
#include "fib_heap.h"
#include "testsgenerator.h"
#include <time.h>
#include <sys/time.h>
using namespace std;

int main()
{
    /*
    Creo los heaps
    */
/*
    Heap h(1000);
    fib_heap f, f2;
    for(int i=20; i>0; i--)
    { //Inserto 20 elementos decrecientemente en un heap normal
        h.Insert(i);
        //h.Impr();
    }

    h.Delete(1); //Elimino el elemento de la posicion 1 del heap
    h.Impr(); //Imprimo el heap
    int* array = (int*)calloc(1000, sizeof(int)), j=0; //Creo un arreglo para convertirlo en heap
    array[0] = 20; //Le pongo el tamaño en la primera posicion como te dije antes

    for(int i=1; i<21; i++)
    { //Lleno el arreglo
        array[i] = 20 - j;
        j++;
    }

    array = h.Build_Heap(array); //Convierto el arreglo en heap y lo muestro abajo (esta comentado por si quieres usarlo o no)
    /*for(int i=0; i<21; i++){
            cout << array[i] << endl;
        }*/

    /*
        Inserto varios elementos en los 2 heaps de fibonacci
        */
/*
    f.Insert(5);
    f.Insert(3);
    f.Insert(7);
    f.Insert(2);
    f.Insert(10);
    f2.Insert(6);
    f2.Insert(1);
    f2.Insert(11);
    f2.Insert(0);
    f2.Insert(12);
    //f.Impr(f.Get_Min());
    //f2.Impr(f2.Get_Min());
    f.Union(f2.Get_Min(), f2.Get_Nodes()); //Uno los heaps. Si quieres arriba descomenta para que veas los heaps por separados
    f.Impr(f.Get_Min()); //Imprimo el heap resultante de la union
*/

    /** Aqui inicia la prueba **/
   TestsGenerator* Tester= new TestsGenerator (20, 100000, 100000, false, 1, 2000);
   // TestsGenerator (n_pruebas, m_operaciones, k_nodos, genFile, minKey, maxKey);

   Tester->setnOpHeap(2); // Especificamos el numero de operaciones posibles

   Tester->setnOpFHeap(2); // Especificamos el numero de operaciones posibles

   Tester->runHeapTest(); // Que corra la prueba en el heap!
   /** XOR **/
   //Tester->runFHeapTest(); // Que corra la prueba en el fheap! 1 por ejecucion!!!

    return 0;
}

